Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

start [2010/11/27 13:54]
admin
start [2011/03/15 11:11] (atual)
admin
Linha 37: Linha 37:
=== Lista 1) Exercicios de revisão de programação - 19/08/2010 === === Lista 1) Exercicios de revisão de programação - 19/08/2010 ===
-  - Calcular as somas <latex>S(N)=\sum_{i=1}^{N-1} \frac{1}{i^2}</latex> e <latex>SI(N)=\sum_{i=1}^{N-1} \frac{1}{(N-i)^2}</latex> com i sendo uma variável ponto flutuante de precisão simples. Plote as diferencas <latex> \left|S(N)-S_{\infty}\right|/S_{\infty}</latex> vs N e  <latex> \left|SI(N)-S_{\infty}\right|/S_{\infty}</latex> vs N para  <latex>N=100,200,..,10^6</latex> onde <latex>S_{\infty}=\frac{\pi ^2}{6}</latex>+  - Somas não são comutativas no computador! Calcule as somas <latex>S(N)=\sum_{i=1}^{N-1} \frac{1}{i^2}</latex> e <latex>SI(N)=\sum_{i=1}^{N-1} \frac{1}{(N-i)^2}</latex> com i sendo uma variável ponto flutuante de precisão simples e coloque **em um mesmo gráfico** as diferencas <latex> \left|S(N)-S_{\infty}\right|/S_{\infty}</latex> vs N e  <latex> \left|SI(N)-S_{\infty}\right|/S_{\infty}</latex> vs N para  <latex>N=100,200,..,10^6</latex> onde <latex>S_{\infty}=\frac{\pi ^2}{6}</latex>.
  - Escrever um programa que recebe como entrada um número inteiro em representação decimal e retorna sua expansão binária. Para tal, crie uma função que verifica se o i-ésimo bit de uma palavra (variável do programa) vale zero ou um.   - Escrever um programa que recebe como entrada um número inteiro em representação decimal e retorna sua expansão binária. Para tal, crie uma função que verifica se o i-ésimo bit de uma palavra (variável do programa) vale zero ou um.
  - Considere um número de ponto flutuante de N bits com E bits reservados para o expoente e M=N-E-1 para a mantissa. Represente TODOS os números obtidos nesta representação em um grafico de barras no gnuplot. Para cada número x, armazene um par (x,1) e plote o arquivo de dados com ''with impulses''. Reveja [[http://www.psc.edu/general/software/packages/ieee/ieee.php|aqui]] a definição de números de ponto flutuante. \\ {{:floating_point.jpg?300|}}   - Considere um número de ponto flutuante de N bits com E bits reservados para o expoente e M=N-E-1 para a mantissa. Represente TODOS os números obtidos nesta representação em um grafico de barras no gnuplot. Para cada número x, armazene um par (x,1) e plote o arquivo de dados com ''with impulses''. Reveja [[http://www.psc.edu/general/software/packages/ieee/ieee.php|aqui]] a definição de números de ponto flutuante. \\ {{:floating_point.jpg?300|}}
Linha 49: Linha 49:
Sendo a derivada de uma função <latex>f(x)</latex> definida por <latex> \frac{df}{dx}=\lim_{h \to 0}\frac{f(x+h)-f(x)}{h}</latex> e Sendo a derivada de uma função <latex>f(x)</latex> definida por <latex> \frac{df}{dx}=\lim_{h \to 0}\frac{f(x+h)-f(x)}{h}</latex> e
-<latex>f(x+h)=f(x)+hf^{\prime}(x)+\frac{h^2}{2}f^{\prime \prime}(x)+\ldots</latex>, o método de Euler (com difereças posteriores) corresponde ao truncamento desta expansão em ordem h. Obtemos assim que <latex> \frac{df}{dx}=\frac{f(x+h)-f(x)}{h}</latex>.+<latex>f(x+h)=f(x)+hf^{\prime}(x)+\frac{h^2}{2}f^{\prime \prime}(x)+\ldots</latex>, o método de Euler (com difereças posteriores) corresponde ao truncamento desta expansão em ordem h. Obtemos assim que a derivada no ponto x é aproximada por <latex>\frac{df}{dx}=\frac{f(x+h)-f(x)}{h}</latex>.
  - Mostre que o método de Euler com diferenças centradas é exato em <latex>{\cal O}(h^2)</latex>, onde h é o passo de discretização da derivada. Nesse método escrevemos <latex> \frac{df}{dx}=\frac{f(x+h)-f(x-h)}{2h}</latex>   - Mostre que o método de Euler com diferenças centradas é exato em <latex>{\cal O}(h^2)</latex>, onde h é o passo de discretização da derivada. Nesse método escrevemos <latex> \frac{df}{dx}=\frac{f(x+h)-f(x-h)}{2h}</latex>
-  - Calcule a derivada numérica de <latex>f(x)=\frac{sin(x^2)e^{x/3}}{\sqrt{(x^2+4)}}</latex> no ponto x=3 usando o método de Euler simples com passo de discretização h entre <latex>10^{-8}</latex> e <latex>1</latex> e faça um gráfico mostrando a diferença relativa entre a derivada numérica e o valor exato da derivada para ponto flutuante com precisão simples e dupla. Entre quais valores de h a aproximação é aceitável? +  - Calcule a derivada numérica de <latex>f(x)=\frac{sin(x^2)e^{x/3}}{\sqrt{(x^2+4)}}</latex> no ponto x=3 usando o método de Euler simples com passo de discretização entre <latex>h=10^{-8}</latex> e <latex>h=1</latex> e faça um gráfico mostrando a diferença relativa entre a derivada numérica e o valor exato da derivada para ponto flutuante com precisão simples e dupla. Entre quais valores de h a aproximação é aceitável? (Solução [[http://davinci.if.ufrgs.br/wiki/index.php/Derivada_Num%C3%A9rica|aqui]])
  - Mostre que o método de Euler é instável para qualquer passo h na solução do problema de crescimento exponencial <latex> \frac{dy}{dx}=\lambda x</latex>   - Mostre que o método de Euler é instável para qualquer passo h na solução do problema de crescimento exponencial <latex> \frac{dy}{dx}=\lambda x</latex>
-  - Integre a equação diferencial <latex>\frac{dy}{dt}-y=-\frac{1}{2}e^{t/2}\sin(5t)+5e^{t/2}\cos(5t)</latex> com <latex>y(0)=1</latex> com o método de Euler simples para diferentes valores de passo h=0.1, h = 0.05, h = 0.01, h = 0.005 e h  = 0.001  e compare cada solução em t=1,2,3,4 e 5 com a solução exata <latex>y(t)=e^{t/2}sin(5t)</latex> . Faça um gráfico com a solução para h=0.05 entre t=0 e t=5 e a solução exata.+  - Integre a equação diferencial <latex>\frac{dy}{dt}-y=-\frac{1}{2}e^{t/2}\sin(5t)+5e^{t/2}\cos(5t)</latex> com <latex>y(0)=1</latex> com o método de Euler simples para diferentes valores de passo h=0.1, h = 0.05, h = 0.01, h = 0.005 e h  = 0.001  e compare cada solução em t=1,2,3,4 e 5 com a solução exata <latex>y(t)=e^t+e^{t/2}sin(5t)</latex>. Voce pode encontrar essa solução exata digitando a equação diferencial no site do [[http://www.wolframalpha.com|WolframAlpha]] 
 +  -  Faça um gráfico com a solução para h=0.05 entre t=0 e t=5 e a solução exata.
  - Resolva o problema acima com o método de Euler com diferenças centradas e os mesmos valores de h. Para obter o primeiro passo use o método de Euler simples com passo de discretização dez vezes menor que o usado no resto do intervalo.   - Resolva o problema acima com o método de Euler com diferenças centradas e os mesmos valores de h. Para obter o primeiro passo use o método de Euler simples com passo de discretização dez vezes menor que o usado no resto do intervalo.
  * Referências     * Referências  
Linha 90: Linha 91:
  - Faça o gráfico da posição como função do tempo para <latex>q=0.2,2.0</latex> e <latex>20.0</latex> com posição angular inicial <latex>\theta_0=\pi/2</latex> e <latex>\omega_0=0</latex>. Note que para valores grandes de q devemos recuperar o movimento sem dissipação (conservativo) e, portanto, devemos utilizar um método simplético, como Verlet ou Euler-Cromer, para integrar a equação de movimento.   - Faça o gráfico da posição como função do tempo para <latex>q=0.2,2.0</latex> e <latex>20.0</latex> com posição angular inicial <latex>\theta_0=\pi/2</latex> e <latex>\omega_0=0</latex>. Note que para valores grandes de q devemos recuperar o movimento sem dissipação (conservativo) e, portanto, devemos utilizar um método simplético, como Verlet ou Euler-Cromer, para integrar a equação de movimento.
Considere agora uma força periódica impulsionando o pêndulo com força <latex> F_e = A\cos{(\omega_e t)}</latex>. A equação de movimento pode ser escrita como <latex>\frac{d^2\theta}{dt^2} + \frac{1}{q}\frac{d\theta}{dt} + \sin{(\theta)}=A\cos{(\omega_E t)}</latex>. Considere agora uma força periódica impulsionando o pêndulo com força <latex> F_e = A\cos{(\omega_e t)}</latex>. A equação de movimento pode ser escrita como <latex>\frac{d^2\theta}{dt^2} + \frac{1}{q}\frac{d\theta}{dt} + \sin{(\theta)}=A\cos{(\omega_E t)}</latex>.
-  - Construa o gráfico <latex>\omega(t) \times t</latex> com <latex>q=2, ~ \omega_E = 2/3</latex> e <latex> A=1.08, 1.10, 1.13</latex> e <latex>g=1,23</latex>, respectivamente. Observe a mudança de comportamento ao variarmos a amplitude A da força externa. Simule o pêndulo por 100 ciclos da força externa e despreze os primeiros 10 ciclos (quanto vale o período <latex>\tau</latex> da força externa neste exemplo?).+  - Construa o gráfico <latex>\omega(t) \times t</latex> com <latex>q=2, ~ \omega_E = 2/3</latex> e <latex> A=1.08, 1.10, 1.13</latex> e <latex>1,23</latex>, respectivamente. Observe a mudança de comportamento ao variarmos a amplitude A da força externa. Simule o pêndulo por 100 ciclos da força externa e despreze os primeiros 10 ciclos (quanto vale o período <latex>\tau</latex> da força externa neste exemplo?).
  - Construa o espaço de fases para cada uma das situações descritas acima com a evolução do ponto representativo   - Construa o espaço de fases para cada uma das situações descritas acima com a evolução do ponto representativo
  - Faça um gráfico "estroboscópico", chamado seção de Poincaré, imprimindo os pontos no espaço de fase correspondentes a intervalos de tempo múltiplos do período <latex>\tau</latex> da força externa <latex>t=0,\tau,2\tau,\ldots,n\tau,\ldots</latex>.   - Faça um gráfico "estroboscópico", chamado seção de Poincaré, imprimindo os pontos no espaço de fase correspondentes a intervalos de tempo múltiplos do período <latex>\tau</latex> da força externa <latex>t=0,\tau,2\tau,\ldots,n\tau,\ldots</latex>.
Linha 138: Linha 139:
  * Calcular a frequência P(i) de ocorrência de cada dígito i na sequência.   * Calcular a frequência P(i) de ocorrência de cada dígito i na sequência.
  * Calcular a frequência P(i,j) de ocorrência consecutiva de cada par de dígitos (i,j) na primeira metade da sequência. Utilize essa informação para adivinhar, na segunda metade da sequência, qual o dígito j seguinte a um dado dígito i da sequência. Qual a sua frequência de acertos? Como ela se compara com a probabilidade medida na primeira metade?   * Calcular a frequência P(i,j) de ocorrência consecutiva de cada par de dígitos (i,j) na primeira metade da sequência. Utilize essa informação para adivinhar, na segunda metade da sequência, qual o dígito j seguinte a um dado dígito i da sequência. Qual a sua frequência de acertos? Como ela se compara com a probabilidade medida na primeira metade?
-  - A função de correlação <latex>c(\tau)=\frac{\left(2/T\sum_{t=0}^{T/2}x(t)x(t+\tau)\right ) - \left(2/T\sum_{t=0}^{T/2}x(t)\right )^2}{ \left(2/T\sum_{t=0}^{T/2}x(t)^2\right ) - \left(2/T\sum_{t=0}^{T/2}x(t)\right )^2}</latex> é uma das ferramentas tradicionais de análise de sinais. Ela mede o grau de correlação entre o valor do sinal medido em um instante e outro sinal medido em um instante de tempo subsequente. Note que, em sinais não estacionários, a função de correlação pode depender do instante inicial da medida <latex>c(t,\tau)</latex>. Não trataremos desses casos aqui.+  - A função de correlação <latex>c(\tau)=\frac{\left(2/T\sum_{t=0}^{T/2}x(t)x(t+\tau)\right ) - \left(2/T\sum_{t=0}^{T/2}x(t)\right )\left(2/T\sum_{t=0}^{T/2}x(t+\tau)\right )}{ \left(2/T\sum_{t=0}^{T/2}x(t)^2\right ) - \left(2/T\sum_{t=0}^{T/2}x(t)\right )^2}</latex> é uma das ferramentas tradicionais de análise de sinais. Ela mede o grau de correlação entre o valor do sinal medido em um instante e outro sinal medido em um instante de tempo subsequente. Note que, em sinais não estacionários, a função de correlação pode depender do instante inicial da medida <latex>c(t,\tau)</latex>. Não trataremos desses casos aqui.
  - Calcule a função de correlação para uma série de 10000 pontos obtidos com a evolução do mapa logístico com <latex>\lambda=3.569945672</latex> (ponto de acumulação, infinitas órbitas periódicas instáveis emergem neste ponto), <latex>\lambda=3.7</latex>, <latex>\lambda=1+\sqrt{2}</latex> (transição caos-ordem em uma janela de período 3) e <latex>\lambda=4.0</latex> (ergodicidade comprovada para esse valor de parâmetro).   - Calcule a função de correlação para uma série de 10000 pontos obtidos com a evolução do mapa logístico com <latex>\lambda=3.569945672</latex> (ponto de acumulação, infinitas órbitas periódicas instáveis emergem neste ponto), <latex>\lambda=3.7</latex>, <latex>\lambda=1+\sqrt{2}</latex> (transição caos-ordem em uma janela de período 3) e <latex>\lambda=4.0</latex> (ergodicidade comprovada para esse valor de parâmetro).
Linha 164: Linha 165:
http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Generation.html http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Generation.html
  - Usando o gerador congruencial x=(x*A)mod(B) gere pontos em um espaço 2D e visualize seu resultado. Utilize A=16807 e 65539 e B=2147483648. Estes números podem ser gerados sem a operação mod com números inteiros de 32 bits **com sinal.** Visualize seus resultados normalizando o número aleatório para gerar pontos com alcance [-1...1]   - Usando o gerador congruencial x=(x*A)mod(B) gere pontos em um espaço 2D e visualize seu resultado. Utilize A=16807 e 65539 e B=2147483648. Estes números podem ser gerados sem a operação mod com números inteiros de 32 bits **com sinal.** Visualize seus resultados normalizando o número aleatório para gerar pontos com alcance [-1...1]
-  - Usando o mesmo gerador com A=16807 e 65539, crie pontos em um espaço 3D. Visualize seus resultados e, girando a figura no gnuplot, tente visualizar a regularidade nos pontos gerados com 65539. Em 2D, visualize x versus 9x-6y=z onde x,y,z são a trinca de números aleatórios correspondente a um ponto no espaço 3D. Veja como o gerador 65539 é ruim para amostrar pontos no espaço.+  - Usando o mesmo gerador com A=16807 e 65539, crie pontos em um espaço 3D. Visualize seus resultados e, girando a figura no gnuplot, tente visualizar a regularidade nos pontos gerados com 65539. Em 2D, visualize x versus 9x-6y+z onde x,y,z são a trinca de números aleatórios correspondente a um ponto no espaço 3D. Veja como o gerador 65539 é ruim para amostrar pontos no espaço.
  - Gere <latex>10^4</latex> pares de pontos (x,y) aleatoriamente distribuídos em 2D (com x e y entre -1 e 1). Calcule a fração de números gerados que satisfazem <latex>x^2+y^2 <=1 </latex> . Essa razão deve ser aproximadamente a razao entre a área de um círculo de raio unitário e um quadrado de lado 2. Esta razão vale <latex>\pi/4</latex>. Multiplique sua fração de números por 4 e voce terá calculado pi pelo Método de Monte Carlo. Faça  um gráfico mostrando a convergência do valor estimado com o método de Monte Carlo para o valor aproximado de 3.14159265358979323846 (por exemplo, mostre no gráfico a diferença entre o valor aproximado e o valor estimado) utilizando o gerador com A=16807 e compare o resultado obtido com o gerador A=65539. Quantos números aleatórios devemos gerar para se obter <latex>10\%</latex> de precisão na sua estimativa com A=16807?   - Gere <latex>10^4</latex> pares de pontos (x,y) aleatoriamente distribuídos em 2D (com x e y entre -1 e 1). Calcule a fração de números gerados que satisfazem <latex>x^2+y^2 <=1 </latex> . Essa razão deve ser aproximadamente a razao entre a área de um círculo de raio unitário e um quadrado de lado 2. Esta razão vale <latex>\pi/4</latex>. Multiplique sua fração de números por 4 e voce terá calculado pi pelo Método de Monte Carlo. Faça  um gráfico mostrando a convergência do valor estimado com o método de Monte Carlo para o valor aproximado de 3.14159265358979323846 (por exemplo, mostre no gráfico a diferença entre o valor aproximado e o valor estimado) utilizando o gerador com A=16807 e compare o resultado obtido com o gerador A=65539. Quantos números aleatórios devemos gerar para se obter <latex>10\%</latex> de precisão na sua estimativa com A=16807?
  - Ruína do jogador: Considere dois jogadores, o primeiro com n1 moedas e o segundo com n2 moedas em um jogo de cara ou coroa. Cada vez que um jogador perde, ele entrega uma moeda para o outro jogador e o jogo se repete até um dos jogadores perder todo o dinheiro. Realize esse jogo um milhão de vezes e calcule a fração de vezes que cada jogador perdeu todo o dinheiro. Esse valor deve ser interpretado como a probabilidade <latex>P_i</latex> de cada jogador iir à falência. Compare seu resultado com os valores teóricos para as  <latex> P_1=\frac{n_2}{n_1+n_2}</latex> e <latex>P_2=\frac{n_1}{n_1+n_2}</latex>. Para ler mais sobre o assunto [[http://mathworld.wolfram.com/GamblersRuin.html|clique aqui]]   - Ruína do jogador: Considere dois jogadores, o primeiro com n1 moedas e o segundo com n2 moedas em um jogo de cara ou coroa. Cada vez que um jogador perde, ele entrega uma moeda para o outro jogador e o jogo se repete até um dos jogadores perder todo o dinheiro. Realize esse jogo um milhão de vezes e calcule a fração de vezes que cada jogador perdeu todo o dinheiro. Esse valor deve ser interpretado como a probabilidade <latex>P_i</latex> de cada jogador iir à falência. Compare seu resultado com os valores teóricos para as  <latex> P_1=\frac{n_2}{n_1+n_2}</latex> e <latex>P_2=\frac{n_1}{n_1+n_2}</latex>. Para ler mais sobre o assunto [[http://mathworld.wolfram.com/GamblersRuin.html|clique aqui]]
 
start.1290873282.txt.gz · Última modificação: 2010/11/27 13:54 por admin     Voltar ao topo
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Design by Chirripó